package com.qianfeng.ssmplatform.strategy.service.impl;


//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼                  BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  


import com.qianfeng.smsplatform.common.constants.CacheConstants;
import com.qianfeng.smsplatform.common.model.Standard_Submit;
import com.qianfeng.ssmplatform.strategy.exception.DataProcessException;
import com.qianfeng.ssmplatform.strategy.service.FilterChain;
import com.qianfeng.ssmplatform.strategy.service.api.CacheService;
import com.qianfeng.ssmplatform.strategy.utils.CheckMobileOperator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * Created by jackiechan on 2020-02-28 14:46
 * 号段补全的策略
 * 号段补全:根据手机号来将当前手机号属于什么运营商,属于什么省市地区,把这些信息保存起来,后面写入 es 的时候我们需要,以后用于统计用的
 *
 * @Author jackiechan
 */
@Service
public class SmsOpIDFilter implements FilterChain {
    private static final Logger LOGGER = LoggerFactory.getLogger(SmsOpIDFilter.class);

    @Autowired
    private CacheService cacheService;

    @Override
    public boolean dealSms(Standard_Submit submit) throws DataProcessException {
        LOGGER.error("SmsOpIDFilter执行了");
        //如何判断运营商,前三位, 当然这里面我们排除掉了携号转网的影响

        //如何判断区域,中间四位是区域的 也就是前 7 位组成了运营商和区域
        //手机号的运营商 id 获取到了
        String mobile = submit.getDestMobile();
        if (CheckMobileOperator.isChinaMobilePhoneNum(mobile)) {
            submit.setOperatorId(1);
        } else if (CheckMobileOperator.isChinaUnicomPhoneNum(mobile)) {
            submit.setOperatorId(2);
        } else {
            submit.setOperatorId(3);
        }
        //热门推荐怎么做,第一个问题什么叫热门?也就是你们的项目对热门的定义是什么,他的规则是什么,它是靠什么动作推动起来
        //比如是靠 点击? 浏览?购买?评论?  知道具体靠什么了,就应该知道如何区分
//我们的省市数据信息在 redis 中通过 hash 保存起来, key 和当前号码的前七位有关系,也就在前七位的基础上拼接了一个前缀
//        Map hmget = cacheService.hmget(CacheConstants.CACHE_PREFIX_PHASE + mobile.substring(0, 7));
//        if (hmget != null && hmget.size() > 0) {
//            submit.setProductID(Integer.parseInt(hmget.get("prov_id").toString()));
//            submit.setCityId(Integer.parseInt(hmget.get("city_id").toString()));
//        } else {
//            //代表没有数据
//            submit.setCityId(0);
//            submit.setProductID(0);
//        }

        String area = cacheService.get(CacheConstants.CACHE_PREFIX_PHASE + mobile.substring(0, 7));
        if (StringUtils.isEmpty(area)) {
            //代表没有数据
            submit.setCityId(0);
            submit.setProvinceId(0);
        }else{
            String[] areas = area.split("&");//因为我们保存的时候是以省&市的方式保存的,所以需要切割一下
            submit.setProvinceId(Integer.parseInt(areas[0]));
            submit.setCityId(Integer.parseInt(areas[1]));
        }

        return true;
    }
}
